var def_IFunctionNamespace;
Object.defineProperty(exports, "__esModule", {
  value: true
});
(function (t) {
  t.changeParentPosConstant = function (t, e) {
    var o = t.convertToWorldSpaceAR(cc.v2(0, 0));
    var n = e.convertToNodeSpaceAR(o);
    t.setParent(e);
    t.setPosition(n);
  };
  t.saveForBrowser = function (t, e) {
    // 设置默认文件名
    if (e === undefined) e = "NewJson"; // 默认文件名

    // 检查是否在浏览器环境中
    if (cc.sys.isBrowser) {
      const blob = new Blob([t], { type: "application/json" }); // 创建 JSON Blob
      const link = document.createElement("a"); // 创建下载链接

      // 设置下载文件名
      link.download = e;
      link.innerHTML = "Download File";

      // 创建 Blob URL
      if (window.webkitURL) {
        link.href = window.webkitURL.createObjectURL(blob);
      } else {
        link.href = window.URL.createObjectURL(blob);
        link.style.display = "none"; // 隐藏链接
        document.body.appendChild(link); // 将链接添加到文档中
      }

      // 触发下载
      link.click();

      // 移除链接
      link.remove();
    }
  };
  t.sizeAreaFuzzyEquals = function (t) {
    // 将 arguments 对象转换为数组
    const e = Array.from(arguments).slice(1); // 忽略第一个参数

    // 计算第一个和第二个元素的面积
    const area1 = e[0].height * e[0].width;
    const area2 = e[1].height * e[1].width;

    // 返回比率判断
    return Math.min(area1, area2) / Math.max(area1, area2) >= t / 100;
  };
  t.isDeepObjectEqual = function t(e, o) {
    // 判断两个值是否相等
    if (e === o) {
      return true;
    }

    // 如果两个都是函数，比较它们的字符串表示
    if (typeof e === "function" && typeof o === "function") {
      return e.toString() === o.toString();
    }

    // 如果两个都是日期对象，比较它们的时间戳
    if (e instanceof Date && o instanceof Date) {
      return e.getTime() === o.getTime();
    }

    // 判断两个值的类型是否相同
    if (Object.prototype.toString.call(e) !== Object.prototype.toString.call(o) || typeof e !== "object") {
      return false;
    }

    // 获取对象的属性名并比较
    const propNamesE = Object.getOwnPropertyNames(e);
    const propNamesO = Object.getOwnPropertyNames(o);

    // 比较属性名的数量和每个属性的值
    return propNamesE.length === propNamesO.length && propNamesE.every(function (key) {
      return isEqual(e[key], o[key]); // 递归比较属性的值
    });

  };
  t.numberInTheArea = function (t, e, o) {
    return t >= e && t <= o;
  };
  t.angleToRadian = function (t) {
    return t * (Math.PI / 180);
  };
  t.radianToAngle = function (t) {
    return t * (180 / Math.PI);
  };
  t.anglePlusOrMinus = function (e) {
    var o = t.angleTo360(e);
    o > 180 && (o -= 360);
    return o;
  };
  t.angleTo360 = function (t) {
    var e = t % 360;
    if (e < 0) {
      e += 360
    }
    return e;
  };
  t.otherToSelfRelativeVelocity = function (t, e, o) {
    // 获取世界法线和线性速度
    const worldManifold = t.getWorldManifold(); // 获取世界法线
    const velocityA = new cc.Vec2(); // 初始化第一个物体的速度向量
    const velocityB = new cc.Vec2(); // 初始化第二个物体的速度向量

    // 获取第一个物体在接触点的线性速度
    e.body.getLinearVelocityFromWorldPoint(worldManifold.points[0], velocityA);

    // 获取第二个物体在接触点的线性速度
    o.body.getLinearVelocityFromWorldPoint(worldManifold.points[0], velocityB);

    // 返回两个速度向量的差值
    return velocityB.sub(velocityA); // 返回B的速度减去A的速度
  };
  t.NodeInScreen = function (t, e) {

    // 将节点 t 转换为世界坐标
    const worldPositionT = t.node.convertToWorldSpaceAR(cc.v2());

    // 创建一个矩形 n，用于表示屏幕区域
    const n = cc.rect(
      worldPositionT.x,
      worldPositionT.y,
      cc.winSize.width / t.zoomRatio,
      cc.winSize.height / t.zoomRatio
    );

    // 将节点 e 转换为世界坐标
    const worldPositionE = e.convertToWorldSpaceAR(cc.v2());

    // 创建一个矩形 r，用于表示对象 e 的区域
    const r = cc.rect(
      worldPositionE.x,
      worldPositionE.y,
      e.width * e.scaleX,
      e.height * e.scaleY
    );

    // 检查矩形 r 是否与矩形 n 相交
    const isInside =
      r.x <= n.x + (n.width + r.width) / 2 &&
      r.x >= n.x - (n.width + r.width) / 2 &&
      r.y <= n.y + (n.height + r.height) / 2 &&
      r.y >= n.y - (n.height + r.height) / 2;

    return isInside;

  };
})(def_IFunctionNamespace || (def_IFunctionNamespace = {}));
exports.default = def_IFunctionNamespace;